package controller

import (
	"fmt"
	"github.com/gofiber/fiber/v2"
	"go_cms/app/dto"
	"go_cms/app/param"
	"go_cms/app/service"
	"go_cms/utils"
	"strconv"
)

type UserController struct {

}

const debug = true

func (this *UserController)Login(ctx *fiber.Ctx) error {
	// 1 解析用户登陆传递的参数
	var loginParam param.LoginParam
	err := ctx.BodyParser(&loginParam)
	if err!=nil {
		utils.Lzlog.Error("parse loginParam err")
		return utils.Failed(ctx,"login参数解析失败")
	}
	if (debug) {
		fmt.Println("account.go 26:",loginParam)
		utils.Lzlog.Info("account.go 26:",loginParam)
	}

	// 2 验证验证码是否正确
	validate := utils.VerifyCaptcha(loginParam.CaptId, loginParam.Code)
	if !validate {
		return  utils.Failed(ctx, "验证码不正确，请重新验证")
	}
	if debug {
		fmt.Println("验证码验证成功",validate)
	}
	// 3.登陆 service 层实现
	us:=service.UserService{}
	userinfo := us.Login(loginParam.Name, loginParam.Password)
	if userinfo != nil{
		tokenModel:= dto.TokenDto{Username: userinfo.Name, Id: strconv.Itoa(int(userinfo.Id))}
		if tokenKey, err := utils.SetToken(tokenModel); err!=nil{
			utils.Lzlog.Error("token generate err")
			return utils.Failed(ctx,"token generate err")
		}else {
			userinfo.Token=tokenKey
			return utils.Success(ctx,userinfo)
		}
		//return utils.Success(ctx, userinfo)
	}else {
		return utils.Failed(ctx, "用户名或密码错误")
	}

	//return utils.Failed(ctx,"登陆失败")
}

//生成验证码
func (uc *UserController)Captcha(ctx *fiber.Ctx) error{
	return utils.GenerateCaptcha(ctx)
}